package com.hdumooc.jdbc;

import com.hdumooc.utils.JDBCUtils;

import java.sql.*;
import java.util.Scanner;

/**
 * @description: 使用预编译对象 PreparedStatement 改造登录案例：解决 SQL 注入的问题
 * @author: Jieyao Lu
 * @date: 2023/11/18 15:45
**/
public class TestLogin02 {
    public static void main(String[] args) throws SQLException {

        // 1.获取连接
        Connection connection = JDBCUtils.getConnection();

        // 2.获取 PreparedStatement 预处理对象
        //  使用 ? 占位符的方式来设置参数
        String sql = "SELECT * FROM jdbc_user WHERE username = ? and password = ?";
        PreparedStatement preparedStatement = connection.prepareStatement(sql);

        // 3.获取用户输入的用户名和密码
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名：");
        String name = scanner.nextLine();
        System.out.println("请输入密码：");
        String password = scanner.nextLine();

        // 4.设置参数，使用 setXXX(占位符的位置(整数), 要设置的值)的方法设置占位符的参数
        preparedStatement.setString(1, name); // 设置第一个问号值为name
        preparedStatement.setString(2, password);

        // 5.执行查询 获取结果集对象
        ResultSet resultSet = preparedStatement.executeQuery();

        // 6.处理结果集
        if (resultSet.next()) {
            System.out.println("登录成功！欢迎您：" + name);
        } else {
            System.out.println("登录失败！");
        }
        // 7.关闭流
        JDBCUtils.close(connection, preparedStatement, resultSet);
    }
}
